[小ネタ] GitHub Pagesを使ってMavenの簡易的なリポジトリを作ってみた
はじめに
Javaのプロジェクトで使われるビルドツールであるMavenのリポジトリについて調べる機会がありました。 その際、GitHub Pagesを使ってリポジトリを作れることがわかったので、試してみました。
環境
次のような環境・バーションで実施しました。
また、本記事のMavenの操作は、すべてCLIを想定しています。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.4 BuildVersion: 19E287
$ java -version openjdk version "1.8.0_242" OpenJDK Runtime Environment Corretto-8.242.08.2 (build 1.8.0_242-b08) OpenJDK 64-Bit Server VM Corretto-8.242.08.2 (build 25.242-b08, mixed mode)
$ mvn -version Apache Maven 3.6.1 (snip)
※Maven自体が未インストールの場合はHomebrew等で追加して下さい。
事前準備
Mavenのコマンドを使用してJavaプロジェクトの雛形を作っておきます。
$ mvn archetype:generate \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false \ -DgroupId=hoge \ -DartifactId=fuga
※hoge
, fuga
の所は適当な名前に置換して下さい。
ここでは単純にHello Wrold
を出力させるpluginを作成します。
package hoge; public class App { public App() { System.out.println( "Hello World!" ); } }
設定方法
具体的には、以下のGitHubのpluginを利用します。
github/maven-plugins
そのためにまずGitHubに専用のリポジトリを作成しておきます。
この時、git init
し、READMEファイルをpushしておくと、以下のGitHub Pagesのオプションを選択できるようになります。
ここでmaster
を選択します。
ついでGitHubのトークンを取得し、以下のようにMavenの設定ファイル~/.m2/settings.xml
へ追記します。
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>github</id> <password>{GitHub Token}</password> </server> </servers> </settings>
ここからは、pom.xml
の編集作業です。
site-maven-plugin
を追加し、configuration
中にGitHubの情報を追加します。
<plugin> <groupId>com.github.github</groupId> <artifactId>site-maven-plugin</artifactId> <version>0.12</version> <executions> <execution> <goals> <goal>site</goal> </goals> <phase>site</phase> <configuration> <server>github</server> <repositoryName>Repository-Name</repositoryName> <repositoryOwner>GitHub-Account</repositoryOwner> <message>Creating site</message> <outputDirectory>mvn-repo</outputDirectory> <branch>refs/heads/master</branch> <path></path> <merge>ture</merge> </configuration> </execution> </executions> </plugin>
※GitHub-Account
とRepository-Name
はご自身のアカウント/リポジトリに置き換えてください。
GitHub Pagesに関する設定としては上記のpluginのみですが、併せてmaven-site-plugin
とmaven-project-info-reports-plugin
も指定しておきます。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> <configuration> <locales>en</locales> <inputEncoding>UTF-8</inputEncoding> <outputEncoding>UTF-8</outputEncoding> <outputDirectory>mvn-repo</outputDirectory> </configuration> <dependencies> <dependency> <groupId>org.apache.maven.doxia</groupId> <artifactId>doxia-site-renderer</artifactId> <version>1.9.1</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin>
さらに、今回の方法では、mvn deploy
実行時に一旦ローカルのディレクトリに出力し、それをmvn site
でアップロードすると言う手順を踏みたいため、以下の様にdistributionManagement
を追記します。
<distributionManagement> <repository> <id>internal.repo</id> <name>Temporary Repository</name> <url>file:///full/path/to/output/directory</url> </repository> </distributionManagement>
※file:///full/path/to/output/directory
を適切なディレクトリ名に置き換えてください。
※既述のpluginの設定ではディレクトリ名はmvn-repo
となっています
最後に、pom.xml
に以下の情報も忘れずに書いておきます。
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <github.global.server>github</github.global.server> </properties>
コンパイルおよびアップロード
以下のゴールを順番に実施して、最後のmvn site
でGitHubへアップロードします。
mvn clean # 予めcleanしておきます。 mvn compile # コンパイルします。 mvn deploy # 一旦ローカルに出力します。 mvn site # アップロードします。
ここでは、各コマンドの出力内容については割愛させて頂きますが、mvn site
のCreating blobs
のところで少し時間がかかると思います。
使用方法
上記のライブラリを使う側の設定は、例えば以下のような感じです。
テストプロジェクトを作成してhoge.App
をimportします。
package piyo; import hoge.App; public class UserSide { public static void main( String[] args ) { App app = new App(); } }
こちらのpom.xmlには下記のようにdependency
とrepository
を追加して下さい。
<dependencies> <dependency> <groupId>hoge</groupId> <artifactId>fuga</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <repositories> <repository> <id>github</id> <name>my github repository</name> <url>https://raw.githubusercontent.com/{GitHub-Account}/{Repository-Nmae}/master/</url> </repository> </repositories>
※{GitHub-Account}と{Repository-Nmae}はそれぞれご修正下さい。
ハマりどころ
ローカルキャッシュ
Mavenのpluginは(特に設定をしていなければ)~/.m2/repository
にキャッシュされます。
そのため、該当するgroupId/artifactId
のディレクトリを別の場所に退避させることで、(同一バージョンであっても)コンパイル時にダウンロードし直す事ができます。
GitHubアカウント
GitHubのReal Name
の欄が未記入だとエラーになります。アカウントを本名で使用されていない方などはご注意下さい。
さいごに
最後まで読んで頂きありがとうございました。
実際の運用面ではいくつかハードルがあるかもしれませんが、GitHub Pagesにリポジトリを作る過程自体は、Mavenの理解を深める上では役立つのではないかと思いました。
どなたかに届けば幸いです。